package com.ylbh.modules.goodsorder.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ylbh.common.pojo.goodsorder.dto.OrderConditionDTO;
import com.ylbh.common.pojo.goodsorder.vo.*;
import com.ylbh.common.pojo.goodsorder.dto.OrderShipmentDTO;
import com.ylbh.modules.goodsorder.entity.ShoppingOrderForm;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 *
 * 商品订单
 * @author czx
 * @date 2019-04-26 14:47:48
 */
@Mapper
@Repository
public interface ShoppingOrderFormMapper extends BaseMapper<ShoppingOrderForm> {

    /**
     * 根据条件来查询出订单列表信息
     * @param orderConditionDTO
     * @param page
     */
    List<OrderListVO> selectOrderByCondition(@Param(value = "orderConditionDTO") OrderConditionDTO orderConditionDTO, Page page);

    /**
     * 根据该笔订单中的所有商品
     * @param id
     * @return
     */
    List<SubOrderListVO> selectSubOrder(@Param(value = "id") Long id);

    List<SubOrderListVO> selectSubOrders(@Param(value = "id") Long id);

    /**
     * 查出所有物流公司
     * @return
     */
    List<LogisticsCompanyVO> selectLogisticsCompanyVO();

    /**
     * 订单发货
     * @param orderShipmentDTO
     */
    void updateOrderShipmentById(@Param(value = "orderShipmentDTO")OrderShipmentDTO orderShipmentDTO);

    /**
     * 根据id查出当前该商品的物流公司
     * @param id
     */
    ExpressCompanyVO selectExpressNameById(@Param(value = "id")Long id);

    /**
     * 修改物流
     * @param orderShipmentDTO
     */
    void updateExpressNameOrShipCodeById(@Param(value = "orderShipmentDTO")OrderShipmentDTO orderShipmentDTO);

    OrderDetailsVO selectOrderByIds(@Param(value = "id")String id);
    /**
     * 商城订单详情
     * @param orderId
     * @return
     */
    OrderDetailsVO selectOrderById(@Param(value = "orderId")String orderId);

    /**
     * 导出商城订单
     * @param orderTypes
     * @param startTime
     * @param endTime
     * @return
     */
    List<OrderExcelVO> selectOrderExcel(String orderTypes, String startTime, String endTime, String invoiceType);

    /**
     * 查询出子订单的物流信息
     * @param orderId
     * @return
     */
    List<String> selectGoodsCartByOfId(String orderId);

    /**
     * 子订单发货
     * @param dto
     */
    void updateGoodsCartById(@Param(value = "dto") OrderShipmentDTO dto);

    /**
     * 修改总订单中的信息
     * @param orderShipmentDTO
     */
    void updateOrderShipmentByIds(@Param(value = "dto") OrderShipmentDTO dto);

    /**
     * 修改子订单物流信息
     * @param orderShipmentDTO
     */
    void selectExpressNameOrDeliveryNoById(@Param(value = "dto") OrderShipmentDTO orderShipmentDTO);

    /**
     * 子订单物流公司
     * @param id
     * @return
     */
    ExpressCompanyVO selectExpressNameByCartId(Long id);

    int notAuditedCount(String orderId);

    void updateGoodsCartInfoDeliveryNo(String cartId, String shipCodeId, String shipCodeNum, Date date);

    void updateOrderFormInfoShipCode(String id, String shipCodeId, String shipCodeNum, Date date);

    /**
     * 根据主订单id来查询出关联的子订单来计算出送的券和消耗的券量
     * @param id
     * @return
     */
    List<GoodsCartVO> selectCartIdById(@Param(value = "id") Integer id);

    /**
     * 根据商品id查询出对应商品的规格信息
     * @param goodsId
     * @return
     */
    String selectGoodsById(@Param(value = "goodsId") Integer goodsId);

    /**
     * 订单商品信息
     * @param id
     * @return
     */
    List<OrderGoodsVO> selectOrderGoodsByOrderId(@Param(value = "id") Long id);

    /**
     * 根据物流公司的id去查询编码
     * @param shipId
     * @return
     */
    String selectExpressCode(String shipId);

    /**
     * 根据订单查询收货地址id
     * @param id
     * @return
     */
    String selectAddressId(String id);

    AddressVO selectAddress(String areaId);

    /**
     * 查询发件商品名
     * @param cartId
     * @return
     */
    String selectGoodsName(String cartId);

    List<OrderDetailsVO> selectOrderForm(String orderId);

    /**
     * 查询用户是否还有未完成的订单
     * @param userId
     * @return
     */
    int selectUnfinishedOrderByUserId(Integer userId);

    /**
     * 查询子订单中商品数量
     * @param orderNo
     * @return
     */
    List<SubOrderListVO> selectOrderCount(String orderNo);

    /**
     * 根据候鸟推送修改子订单物流信息
     * @param goodsCart
     * @param expressNo
     * @param deliveryTime
     * @param isAll
     */
    void updateOrderExpressById(int goodsCart, String expressNo, String deliveryTime, String spec, Integer expressId);

    /**
     * 修改主订单物流
     * @param orderNo
     * @param expressNo
     * @param deliveryTime
     */
    void updateOrderFromExpressById(String orderNo, String expressNo, String deliveryTime, Integer expressId);

    /**
     * 收货人信息
     * @param orderNo
     * @return
     */
    OrderOrAddressVO selectOrderAreaInfoByOrderNo(String orderNo);

    /**
     * 根据候鸟的物流编码查询物流公司id
     * @param expressCode
     * @return
     */
    List<ShoppingExpressCompanyVO> selectExpressIdByCode(String expressCode);

    /**
     * 查询出所有候鸟未发货的订单
     * @return
     */
    List<HNOrderVO> selectHNOrder();

    /**
     *
     * @param express
     */
    void insertComment(String express);

    /**
     * 通知供应商发货
     * @param id
     */
    void updateNotifySupplier(String id, Date date);
}
